package br.com.fachada;

import java.util.List;

import br.com.dao.Dao;
import br.com.entidade.Animal;
import br.com.entidade.Funcionario;
import br.com.repositorio.RepositorioAnimal;
import br.com.repositorio.RepositorioFuncionario;
import br.com.util.Organizador;

public class Fachada {
	private static Fachada instancia;
	
	RepositorioAnimal repositorioAnimal;
	RepositorioFuncionario repositorioFuncionario;
	
	Organizador organizador;
	
	private Fachada(){
		repositorioAnimal = new RepositorioAnimal();
		repositorioFuncionario = new RepositorioFuncionario();
		organizador = Organizador.getInstance();
	}
	
	public static Fachada getInstancia(){
		if (instancia == null) {

			instancia = new Fachada();
		}
		return instancia;
	}
	
	public Funcionario autenticarFuncionario(String cpf, String senha) {
		return repositorioFuncionario.autenticarFuncionario(cpf, senha);
	}
	
	public Funcionario buscarFuncionarioPorId(Long id) {
		return repositorioFuncionario.buscarFuncionarioPorId(id);
	}
	
	public Funcionario buscarFuncionarioPorCPF(String cpf) {
		return repositorioFuncionario.buscarFuncionariosPorCPF(cpf);
	}
	
	public List<Funcionario> listarFuncionariosPorNome(String nome) {
		return repositorioFuncionario.listarFuncionariosPorNome(nome);
	}
	
	public List<Funcionario> listarFuncionarios() {
		return repositorioFuncionario.listarFuncionarios();
	}
	
	public void cadastrarFuncionario(Funcionario funcionario) {
		repositorioFuncionario.cadastrarFuncionario(funcionario);
	}
	
	public void atualizarFuncionario(Funcionario funcionario) {
		repositorioFuncionario.atualizarFuncionario(funcionario);
	}
	
	public void deletarFuncionario(Long id) {
		repositorioFuncionario.deletarFuncionario(id);
	}
	
	public Animal buscarAnimalPorId(Long id) {
		return repositorioAnimal.buscarAnimalPorId(id);
	}
	
	public List<Animal> listarTodosOsAnimais() {
		return repositorioAnimal.listarTodosOsAnimais();
	}
	
	public List<Animal> listarAnimaisPorNome(String nome) {
		return repositorioAnimal.listarAnimaisPorNome(nome);
	}
	
	public List<Animal> listarAnimaisPorNomeECategoriaComLike(String nome, String categoria) {
		return repositorioAnimal.listarAnimaisPorNomeECategoria(nome, categoria);
	}
	
	public List<Animal> listarAnimaisAdotados() {
		return repositorioAnimal.listarAnimaisAdotados();
	}
	
	public List<Animal> listarAnimaisNaoAdotados() {
		return repositorioAnimal.listarAnimaisNaoAdotados(); 
	}
	
	public List<Animal> listarAnimaisVermifugados() {
		return repositorioAnimal.listarAnimaisVermifugados();
	}
	
	public List<Animal> listarAnimaisNaoVermifugados() {
		return repositorioAnimal.listarAnimaisNaoVermifugados();
	}
	
	public List<Animal> listarAnimaisVacinados() {
		return repositorioAnimal.listarAnimaisVacinados();
	}
	
	public List<Animal> listarAnimaisNaoVacinados() {
		return repositorioAnimal.listarAnimaisNaoVacinados();
	}
	
	public List<Animal> listarAnimaisEspeciais() {
		return repositorioAnimal.listarAnimaisEspeciais();
	}
	
	public List<Animal> listarAnimaisNaoEspeciais() {
		return repositorioAnimal.listarAnimaisNaoEspeciais();
	}

	public List<Animal> listarAnimaisPorCategoria(String categoria) {
		return repositorioAnimal.listarAnimaisPorCategoria(categoria); 
	}
	
	public String listarNecessidadeEspecialPorAnimal(Long idAnimal) {
		return repositorioAnimal.listarNecessidadeEspecialPorAnimal(idAnimal);
	}
	
	public List<Animal> listarAnimalSemCategoria(String nome, String categoria, int idade, String vacinado, String vermifugado, String especial, String raca, String sexo) {
		return repositorioAnimal.listarAnimalSemCategoria(nome, categoria, idade, vacinado, vermifugado, especial, raca, sexo);
	}
	
	public void cadastrarAnimal(Animal animal) {
		repositorioAnimal.cadastrarAnimal(animal);
	}
	
	public void inativarAnimal(Long id) {
		repositorioAnimal.inativarAnimal(id);
	}
	
	public void atualizarAnimal(Animal animal) {
		repositorioAnimal.atualizarAnimal(animal);
	}
	
	public void listarAnimais(Animal arg0, Animal arg1) {
		organizador.compare(arg0, arg1);
	}
	
}